package com.test.daily.leetcode.y2021.m10.day1004;

/**
 * licenseKeyFormatting
 *
 * @author Tom on 2021/10/4
 * 有一个密钥字符串 S ，只包含字母，数字以及 '-'（破折号）。其中， N 个 '-' 将字符串分成了 N+1 组。
 * <p>
 * 给你一个数字 K，请你重新格式化字符串，使每个分组恰好包含 K 个字符。特别地，
 * 第一个分组包含的字符个数必须小于等于 K，
 * 但至少要包含 1 个字符。两个分组之间需要用 '-'（破折号）隔开，
 * 并且将所有的小写字母转换为大写字母。
 * <p>
 * 给定非空字符串 S 和数字 K，按照上面描述的规则进行格式化。
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/license-key-formatting
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 * <p>
 * 示例 1：
 * <p>
 * 输入：S = "5F3Z-2e-9-w", K = 4
 * 输出："5F3Z-2E9W"
 * 解释：字符串 S 被分成了两个部分，每部分 4 个字符；
 *      注意，两个额外的破折号需要删掉。
 * 示例 2：
 * <p>
 * 输入：S = "2-5g-3-J", K = 2
 * 输出："2-5G-3J"
 * 解释：字符串 S 被分成了 3 个部分，
 * 按照前面的规则描述，
 * 第一部分的字符可以少于给定的数量，
 * 其余部分皆为 2 个字符。
 *  
 * <p>
 * 提示:
 * <p>
 * S 的长度可能很长，请按需分配大小。K 为正整数。
 * S 只包含字母数字（a-z，A-Z，0-9）以及破折号'-'
 * S 非空
 */
public class Algo100401_licenseKeyFormatting {

    public static void main(String[] args) {
        String S = "5F3Z-2e-9-w";
        int K = 4;
        String result = licenseKeyFormatting(S, K);
        System.out.println(result);
    }

    public static String licenseKeyFormatting(String s, int k) {
        if (s == null || s.length() == 0) {
            return null;
        }
        char[] str = s.toCharArray();
        StringBuilder tmp = new StringBuilder();
        int j = 0;
        for (int i = 0; i < str.length; i++) {
            if (str[i] != '-') {
                if (str[i] >= 'a' && str[i] <= 'z') {
                    str[i] = (char) (str[i] + 'A' - 'a');
                }
                tmp.append(str[i]);
                j++;
            }
        }
       int count = 0;
        for(;j > 0;j--){
            if(count>0 && count%k == 0){
                tmp.insert(j,'-');
            }
            count++;
        }
        return tmp.toString();
    }
}
